package xyz.zcq.zcqrpc.springboot.start.annotation;

import xyz.zcq.zcqrpc.constant.RpcConstant;
import xyz.zcq.zcqrpc.fault.retry.RetryStrategyKeys;
import xyz.zcq.zcqrpc.fault.tolerant.TolerantStrategyKeys;
import xyz.zcq.zcqrpc.loadbalancer.LoadBalancerKeys;

import java.lang.annotation.ElementType;
import java.lang.annotation.Retention;
import java.lang.annotation.RetentionPolicy;
import java.lang.annotation.Target;

/**
 * 引用服务
 */
@Target({ElementType.FIELD})
@Retention(RetentionPolicy.RUNTIME)
public @interface RpcReference {

    /**
     * 服务接口类对象
     *
     * @return 服务接口类对象
     */
    Class<?> interfaceClass() default void.class;
    /**
     * 服务的版本
     *
     * @return 服务的版本
     */
    String serviceVersion() default RpcConstant.DEFAULT_SERVER_VERSION;
    /**
     * 负载均衡器
     *
     * @return 负载均衡器
     */
    String loadBalancer() default LoadBalancerKeys.ROUND_ROBIN;
    /**
     * 重试策略
     *
     * @return 重试策略
     */
    String retryStrategy() default RetryStrategyKeys.NO_RETRY;
    /**
     * 容错策略
     *
     * @return 容错策略
     */
    String tolerantStrategy() default TolerantStrategyKeys.FAIL_FAST;
    /**
     * 是否模拟调用
     *
     * @return 是否模拟调用
     */
    boolean mock() default false;

}
